/**
 * @file: Carta.cpp.
 * @author: Edwin Marcelo Guzman Buezo.
 * @date: MAY-18-2009.
 * @desc: Este archivo contiene la clase Carta.
 */
#include<string>
#include<iostream>
#include<vector>
#include "Carta.h"
using namespace std;

Palo Carta::getPalo(){
    return _palo;
}

void Carta::setPalo(Palo newPalo){
    _palo = newPalo;
}

Valor Carta::getValor(){
    return _valor;
}

void Carta::setValor(Valor newValor){
    _valor = newValor;
}

Carta::Carta(Palo palo,Valor valor){
    _palo = palo;
    _valor = valor;
}

Carta::Carta(){}

void Carta::imprimirPalo(){
    switch(_palo){
        case TREBOL:    cout << "TREBOL"; break;
        case ESPADA:    cout << "ESPADA"; break;
        case DIAMANTE:  cout << "DIAMANTE"; break;
        case CORAZON:   cout << "CORAZON"; break;
        default:        cout << "?";
    }
}

void Carta::imprimirValor(){
    switch(_valor){
        case DOS:       cout << "2"; break;
        case TRES:      cout << "3"; break;
        case CUATRO:    cout << "4"; break;
        case CINCO:     cout << "5"; break;
        case SEIS:      cout << "6"; break;
        case SIETE:     cout << "7"; break;
        case OCHO:      cout << "8"; break;
        case NUEVE:     cout << "9"; break;
        case DIEZ:      cout << "10"; break;
        case J_JOTA:    cout << "J"; break;
        case Q_CU:      cout << "Q"; break;
        case K_KA:      cout << "K"; break;
        case A_AS:      cout << "A"; break;
        default:        cout << "?";
    }
}

void Carta::imprimir(){
    Carta::imprimirValor();
    cout << " de ";
    Carta::imprimirPalo();
}

void Carta::imprimirS(){
    Carta::imprimir();
    cout<<endl;
}

string Carta::retornarValor1(){
    switch(_valor){
        case DOS:       return "|2 ";
        case TRES:      return "|3 ";
        case CUATRO:    return "|4 ";
        case CINCO:     return "|5 ";
        case SEIS:      return "|6 ";
        case SIETE:     return "|7 ";
        case OCHO:      return "|8 ";
        case NUEVE:     return "|9 ";
        case DIEZ:      return "|10";
        case J_JOTA:    return "|J ";
        case Q_CU:      return "|Q ";
        case K_KA:      return "|K ";
        case A_AS:      return "|A ";
        default:        return "|? ";
    }
}

string Carta::retornarValor2(){
    switch(_valor){
        case DOS:       return " Z|";
        case TRES:      return " E|";
        case CUATRO:    return " h|";
        case CINCO:     return " S|";
        case SEIS:      return " 9|";
        case SIETE:     return " L|";
        case OCHO:      return " 8|";
        case NUEVE:     return " 6|";
        case DIEZ:      return "0I|";
        case J_JOTA:    return " [|";
        case Q_CU:      return " O|";
        case K_KA:      return ">||";
        case A_AS:      return " V|";
        default:        return " ?|";
    }
}

string Carta::retornarPalo1(){
    switch(_palo){
        case TREBOL:    return "_   |";
        case ESPADA:    return ".   |";
        case DIAMANTE:  return "/$  |";
        case CORAZON:   return "  _ |";
        default:        return "    |";
    }
}

string Carta::retornarPalo2(){
    switch(_palo){
        case TREBOL:    return "| ( )  |";
        case ESPADA:    return "| / $  |";
        case DIAMANTE:  return "| /  $ |";
        case CORAZON:   return "|( $/ )|";
        default:        return "|      |";
    }
}

string Carta::retornarPalo3(){
    switch(_palo){
        case TREBOL:    return "|(_x_) |";
        case ESPADA:    return "|(_,_) |";
        case DIAMANTE:  return "| $  / |";
        case CORAZON:   return "| $  / |";
        default:        return "|      |";
    }
}

string Carta::retornarPalo4(){
    switch(_palo){
        case TREBOL:    return "|  Y ";
        case ESPADA:    return "|  I ";
        case DIAMANTE:  return "|  $/";
        case CORAZON:   return "|  $/";
        default:        return "     ";
    }
}

vector<string> Carta::cartaGrande(){
    vector<string> carta;
    carta.push_back(".------.");//0
    string aux = retornarValor1() + retornarPalo1();
    carta.push_back(aux);
    carta.push_back(retornarPalo2());
    carta.push_back(retornarPalo3());
    carta.push_back(retornarPalo4()+retornarValor2());
    carta.push_back("`------'");//5 < 6
    return carta;
    }
//funcion para imprimir varias cartas.
void Carta::printCartasVector(vector<Carta*> cartas){
    if(cartas.size()>0){
    vector<Carta*>::iterator it;
    vector<string> cartasUnidas, aux;
    it=cartas.begin();
    cartasUnidas = (*it)->cartaGrande();
    it++;
    for(; it!=cartas.end() ;it++){
        aux = (*it)->cartaGrande();
        for(int i=0;i<6;i++){
            cartasUnidas[i] = cartasUnidas[i] + " " + aux[i];
            }
        }
    for(int i=0;i<6;i++){
        for(int j=0;j<cartasUnidas[i].size();j++){
        if(cartasUnidas[i][j] == '$'){
            printf("%c",92);
            }
        else{
            cout<<cartasUnidas[i][j];
            }
        }
        cout<<endl;
        }
    }
    }
